package com.jiazhong.controller;

import com.jiazhong.pojo.Book;
import com.jiazhong.service.AccountService;
import com.jiazhong.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
//类级别请求映射，所有方法的基础路径为/book
@RequestMapping("/book")
public class BookController {
    //自动注入BookService实现类，限定使用名称为“BookServiceImpl”的Bean
    //@Autowired实现依赖自动装配，@Qualifier解决多实现类的歧义问题
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;
    @Qualifier("AccountServiceImpl")
    private AccountService accountService;
/**
 *方法一：查询全部书籍
 * @RequestMapping处理GET请求，路径为/book/allBook
 * @param model 用于向视图传递数据模型
 * @return 返回视图名称“allBook”，对应JSP页面
 */
@RequestMapping("/allBook")
    public String list(Model model){

    //输出调试信息（生产环境建议使用日志框架）
    System.out.println("表现层，查询所有书籍，，，");
    //调用服务层查询所有账户数据
    List<Book> list=bookService.queryAllBook();
    //将查询结果存入模型，键为“list”，视图层可通过${list}访问
    model.addAttribute("list",list);
    //视图解析器会拼接为：/WEB-INF/views/allBook.jsp
    return "allBook";
}
/**
 * 方法二：跳转到添加书籍页面
 * @RequestMapping处理GET请求，路径为/book/toAddBook
 * @return 返回视图名称“addBook”，对应书籍添加表单页面
 */
@RequestMapping("/toAddBook")
    public String toAddPaper(){
    //空方法体表示直接跳转视图，无业务逻辑处理
    return "addBook";
}

/**
 * 方法三：处理书籍添加请求
 * @RequestMapping处理Post请求，路径为/book/addBook
 * * @param books 通过表单数据自动绑定到Book对象
 * @return 重定向到书籍列表页，防止表单重复提交
 */
@RequestMapping("/addBook")
    public String addPaper(Book book){
    //打印日志（生产环境建议使用日志框架）
    System.out.println(book);
    //调用服务层执行插入操作
    bookService.addBook(book);
    //重定义到查询全部接口，实现页面刷新
    return "redirect:/book/allBook";
}

/**
 * 方法四：跳转到书籍修改页面
 * @RequestMapping处理Get请求，路径为/book/toUpdateBook/{id}
 * param model 用于传递待修改的书籍数据
 * @param id 路径变量，书籍唯一标识
 * @return 返回视图名称“updateBook“，对应修改表单页面
 */
@RequestMapping("/toUpdateBook")
    public String toUpdateBook(Model model,int id){
    //根据ID查询书籍详情
    Book book=bookService.queryBookId(id);
    //将书籍信息存入模型
    model.addAttribute("book",book);
    //输出调试信息（建议移除）
    System.out.println(book);
    //返回修改页面
    return "updateBook";
}

/**
 * 方法五：书籍修改
 * @RequestMapping处理post请求，路径为/book/updateBook
 * param model 用于传递更新后的书籍数据
 * @param book 通过表单数据自动绑定到BOOK对象
 * @return 重定向到书籍列表页
 */
@RequestMapping("/updateBook")
public String updateBook(Model model,Book book){
    //打印更新数据（建议使用日志）
    System.out.println(book);
    //调用服务层执行更新操作
    bookService.updateBook(book);
    //重新查询最新数据（可选，用于验证更新结果）
    Book updateBook=bookService.queryBookId(book.getId());
    model.addAttribute("book",updateBook);
    //重定向到列表页
    return "redirect:/book/allBook";
}

/**
 * 方法六：处理书籍删除请求
 * @RequestMapping处理GET请求，路径为/book/del{bookId}
 * param -bookId 路径变量 书记唯一标识
 * @return 重定向到书籍列表页
 */
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id){
    System.out.println(id);
    //调用服务层执行删除操作
    bookService.deleteBookById(id);
    //重定向到列表页实现页面刷新
    return "redirect:/book/allBook";
}
}
